﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;
using System.Text.RegularExpressions;

namespace MiraPark
{
    public partial class FormRecebeConvenio : Form
    {
        CabineVO cabineVO = CabineVO.CreateCabineVO();
        UsuarioVO usuarioVO = null;

        public FormRecebeConvenio()
        {
            InitializeComponent();
            this.labelConvenio.Text = "";
            this.labelRecebimento.Text = "";
            this.labelValor.Text = "";
            this.labelVencimento.Text = "";
            this.dateTimePickerIni.Value = DateTime.Today;
        }
        public void setCabine(CabineVO cabineVO, UsuarioVO usuarioVO)
        {
            this.cabineVO = cabineVO;
            this.usuarioVO = usuarioVO;
        }

        private void FormRecebeConvenio_Load(object sender, EventArgs e)
        {
            List<FormaPagamentoVO> listFormaPagamentoVOs = ModelBO.getFormaPagamentos();
            listFormaPagamentoVOs.Add(FormaPagamentoVO.CreateFormaPagamentoVO(-1, ""));
            this.comboBoxFormaPagamento.DataSource = listFormaPagamentoVOs;
            this.comboBoxFormaPagamento.SelectedValue = -1;

            List<RecebimentoVO> listRecebimentoVOs = ModelBO.getRecebimentos(null,null,null,null,true,false,null,null,null,null);
            List<RecebimentoVO> listDataSource = new List<RecebimentoVO>();
            foreach (RecebimentoVO recebimentoVO in listRecebimentoVOs)
                if (recebimentoVO.idConvenio != -1)
                    listDataSource.Add(recebimentoVO);

            this.dataGridViewRecebimento.DataSource = listDataSource;

        }


        private string cutText(string texto)
        {
            string textoTemp = "";

            // tirar o html
            textoTemp = Regex.Replace(texto, "<[\\d\\w\\s/\\\\\\-_\\+=:;,\\.\\*\\$\\#\\[\\]~\\{\\}\\\"\\\'\\^~\\(\\)@!\\?%&]*>", "");

            return textoTemp;
        }
 

        private void buttonFecharJanela_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dataGridViewRecebimento_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            foreach (DataGridViewRow dgvr in this.dataGridViewRecebimento.Rows)
            {
                int idConvenio = (int)dgvr.Cells["idConvenio"].Value;
                ConvenioVO convenioVO = ModelBO.getConvenio(idConvenio);
                dgvr.Cells["convenio"].Value = convenioVO.clienteVO.nome;
            }

        }

        private void dataGridViewRecebimento_SelectionChanged(object sender, EventArgs e)
        {
            List<RecebimentoVO> listRecebimentoVO = (List<RecebimentoVO>)this.dataGridViewRecebimento.DataSource;
            RecebimentoVO recebimentoVO = listRecebimentoVO[this.dataGridViewRecebimento.CurrentRow.Index];

            int idConvenio = (int)this.dataGridViewRecebimento.CurrentRow.Cells["idConvenio"].Value;
            ConvenioVO convenioVO = ModelBO.getConvenio(idConvenio);

            this.labelConvenio.Text = convenioVO.clienteVO.nome;
            this.labelRecebimento.Text = recebimentoVO.recebimento;
            this.labelVencimento.Text = recebimentoVO.dtVencimento.ToShortDateString();
            this.labelValor.Text = recebimentoVO.valor.ToString("#,##0.00");

            this.comboBoxFormaPagamento.SelectedValue = -1;
            this.numericUpDownRecebido.Value = recebimentoVO.valor;

            this.numericUpDownRecebido.Enabled = true;
            this.comboBoxFormaPagamento.Enabled = true;
            this.buttonReceber.Enabled = true;
        }

        private void buttonReceber_Click(object sender, EventArgs e)
        {
            StringBuilder mensagem = new StringBuilder();

            if (this.labelConvenio.Text.Length==0)
            {
                MessageBox.Show("Informe o convênio", "Aviso");
                return;
            }
            if (this.comboBoxFormaPagamento.SelectedValue == null || (int)this.comboBoxFormaPagamento.SelectedValue == -1)
            {
                MessageBox.Show("Informe a Forma de pagamento", "Aviso");
                return;
            }

            DialogResult dr = MessageBox.Show(this, "Confirma o recebimento?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr.ToString().Equals("Yes"))
            {
                List<RecebimentoVO> listRecebimentoVO = (List<RecebimentoVO>)this.dataGridViewRecebimento.DataSource;
                RecebimentoVO recebimentoVO = listRecebimentoVO[this.dataGridViewRecebimento.CurrentRow.Index];

                int idConvenio = (int)this.dataGridViewRecebimento.CurrentRow.Cells["idConvenio"].Value;
                ConvenioVO convenioVO = ModelBO.getConvenio(idConvenio);

                recebimentoVO.dtPagamento = dateTimePickerIni.Value;
                recebimentoVO.formaPagamentoVO = (FormaPagamentoVO)this.comboBoxFormaPagamento.SelectedItem;
                recebimentoVO.idMovimentacao = -1;
                recebimentoVO.valorRec = this.numericUpDownRecebido.Value;

                DateTime dtRef = DateTime.Now;
                MovimentacaoVO movimentacaoVO = MovimentacaoVO.CreateMovimentacaoVO();
                movimentacaoVO.entrada = dtRef;
                movimentacaoVO.especie = MovimentacaoVO.Especie.Convenio;
                movimentacaoVO.fechCabine = false;
                movimentacaoVO.fechConvenio = false;
                movimentacaoVO.fechDiario = false;
                movimentacaoVO.idCabineE = cabineVO.idCabine;
                movimentacaoVO.idCabineS = cabineVO.idCabine;
                movimentacaoVO.idMensalista = -1;
                movimentacaoVO.idConvenio = convenioVO.idConvenio;
                movimentacaoVO.obs = "";
                movimentacaoVO.placa = "";
                movimentacaoVO.saida = dtRef;
                movimentacaoVO.ticket = -1;
                movimentacaoVO.valor = this.numericUpDownRecebido.Value;

                mensagem = new StringBuilder();
                for (int i = 0; i < 2; i++)
                {
                    mensagem.Append(Ticket.getHeader());
                    mensagem.AppendLine("<ce>RECIBO DE CONVENIO </ce>");
                    mensagem.AppendLine("------------------------------------------------");
                    mensagem.AppendLine("Via " + (i == 0 ? "Estacionamento" : "Cliente"));
                    mensagem.AppendLine("");
                    mensagem.AppendLine("Conveniado: " + convenioVO.clienteVO.nome);
                    mensagem.AppendLine("Tabela: " + convenioVO.tabelaConvenioVO.tabelaConvenio);
                    mensagem.AppendLine("");
                    mensagem.AppendLine("Referente: " + recebimentoVO.recebimento);
                    mensagem.AppendLine("Data Vencimento: " + recebimentoVO.dtVencimento.ToShortDateString());
                    mensagem.AppendLine("Valor: " + recebimentoVO.valor.ToString("#,##0.00"));
                    mensagem.AppendLine("Data Pagamento: " + recebimentoVO.dtPagamento.Value.ToShortDateString());
                    mensagem.AppendLine("Valor Recebido: " + recebimentoVO.valorRec.ToString("#,##0.00"));
                    mensagem.AppendLine("Forma de Pagto: " + this.comboBoxFormaPagamento.SelectedItem);
                    mensagem.AppendLine("");
                    mensagem.Append(Ticket.getFooter(false,cabineVO, usuarioVO));
                }
                while (true)
                {
                    if (!Ticket.checkPrint() || !Ticket.printTicket(mensagem.ToString()))
                    {
                        DialogResult dr2 = MessageBox.Show(this, "Tentar novamente?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (dr2.ToString().Equals("Yes"))
                        {
                            continue;
                        }
                        dr2 = MessageBox.Show(this, "Deseja efetivar a contratação sem a emissão do recibo?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (dr2.ToString().Equals("Yes"))
                        {
                            FormMessage formx = new FormMessage();
                            formx.setText(cutText(mensagem.ToString()));
                            formx.ShowDialog(this);
                            break;
                        }
                        else
                        {
                            return;
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                recebimentoVO.idMovimentacao = (int)ModelBO.newMovimentacao(movimentacaoVO);
                ModelBO.setRecebimento(recebimentoVO);

                MessageBox.Show("Recebimento efetuado!");
                this.Close();

            }
        }

    }
}
